; Demon I modem driver                             Version 0.04, 17-Jan-1991
; (c) 1990/1991 Hugo Fiennes

modem_initialise ()
  {
  port_rts(0)
  port_dtr(0)
  return(1)
  }

modem_shutdown ()
  {
  return(1)
  }

modem_connect ()
  {
  port_dtr(1)
  port_rts(1)
  return(_waitconnect())
  }

modem_disconnect ()
  {
  port_rts(0)
  port_dtr(0)
  }

modem_dial (string number[40],integer how)
  {
  integer a,b

  port_dtr(1)
  port_rts(1)
  pause(80)

  for a=1 to len(number)
    {
    if (isdigit($mid(number,a,1)))
      {
      extra_dtrdial(val($mid(number,a,1)))
      pause(80)
      }
    }

  pause(10)
  _demon()
  return(_waitconnect())
  }

modem_answer ()
  {
  do
    {
    pause(4)
    }
  while(port_dcd()==0)

  port_dtr(1)
  port_rts(1)
  extra_setbaud(1)

  return(1)
  }

modem_errorcontrol (string option[10])
  {
  set(linklevel,none)

  if (comparei(option,"vasscom"))
    {
    set(linklevel,vasscom)
    return
    }

  if (comparei($left(option,3),"mnp"))
    {
    set(linklevel,mnp)
    return
    }
  }

_demon ()
  {
  integer t=port_txspeed(),r=port_rxspeed()

  if (t==75 && r==1200)
    {
    extra_setbaud(0)
    return
    }
  if (t==1200 && r==75)
    {
    extra_setbaud(1)
    return
    }
  if (t==300 && r==300)
    {
    extra_setbaud(3)
    return
    }
  extra_setbaud(0)
  return
  }

_waitconnect ()
  {
  integer start=time()

  while((time()-start)<modem_carrierwait)
    {
    if (port_dcd()!=0)
      {
      integer gc=time()

      ; Wait for 2 seconds constant carrier
      while((time()-gc)<200 && port_dcd()!=0)
        {
        pause(5)
        }

      if (port_dcd())
        {
        return(0)
        }
      }
    else
      {
      pause(5)
      }
    }
  return(1)
  }
